package com.xq.jedispool.utlis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * @author xq
 * @version 1.0
 * @date 2021/4/28 12:52
 * @description redis的连接池工具
 */
public class JedisPoolUtil {
    // 被volatile修饰的变量不会被本地线程缓存，对该变量的读写都是直接操作共享内存。
    private static volatile JedisPool jedisPool = null;

    private JedisPoolUtil() {}

    /**
     * 获取redis连接
     * @return
     */
    public static JedisPool getJedisPoolInstance() {
        if(null == jedisPool) {
            synchronized (JedisPoolUtil.class) {
                JedisPoolConfig config = new JedisPoolConfig();
                config.setMaxTotal(1000);
                config.setMaxIdle(32);
                config.setMaxWaitMillis(100*1000);
                config.setTestOnBorrow(true);
                jedisPool = new JedisPool(config,"192.168.2.120",6379);
            }
        }
        return jedisPool;
    }

    /**
     * 释放连接
     * @param jedisPool
     * @param jedis
     */
    public static void release(JedisPool jedisPool, Jedis jedis) {
        if(null != jedis) {
            Jedis jedis1 = null;
            try {
                jedis1 = jedisPool.getResource();
            }finally {
                jedis1.close();
            }
        }
    }
}
